iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 6
0

在day 4有說到,Time-Sharing System的處理器,會在不同的task上面不停的轉跳,去執行不同的instruction,在實踐這件事情之上,有一個非常重要的機制 - Interrupt,其設計理念是為了讓CPU可以盡量的縮減閒置(idle)的時間,它讓整個CPU是透過被interrupt所驅動的。

舉例來說當CPU很奮力地在執行某個task A時,遇到一個需要I/O的地方,於是把任務交給I/O deivce後轉身去做task B,當task A的I/O結束後會通知CPU,緊接著CPU會跳轉回來做task A,透過這樣子的方法,一但在CPU遇到要等待I/O的事情時,能夠馬上切換去做下一個任務,直到I/O device完成後,再回來通知CPU,讓他回到原本的任務,免去一直在重複詢問I/O是否完成了的浪費。所以當很多支程式在運行的時候,CPU就會不斷遊走在好幾支程式之間,不斷切換直到任務都被完成。

Interrupt可以來自於軟體與硬體,

  • 硬體:硬體方面的Interrupt大多來自於外界裝置的I/O,像是滑鼠被移動、鍵盤被按下哪個案件,這些來自於外界的I/O都會造成CPU的切換。
  • 軟體:軟體方面,有兩種觸發條件,第一種就是在程式中出現Error,需要被中斷或者做錯誤處理,第二種則是當使用者的程式呼叫system call,也就是來自作業系統層的函式,比如說常見的cout, system.pause。

在我第一次理解到這個觀念的時候,不由得驚嘆我們平常在用的電腦,背後居然是這麼忙的狀況,就連我在打這篇文章的時候,CPU也很忙碌的不斷被我操縱interrupt。也想到之前過去在上平行運算的時,因為當時的C++很難debug,我總是會寫大量的std::cout去檢查運算出來的值,於是在追求高速運算的程式之中我反而變成最慢的,那時候我都自稱他為cout bound,在比較深刻瞭解作業系統之後才知道那是因為interrupt的機制與I/O bound才拖累程式的執行效能,算是一種學以致用的情境。

btw,真心覺得平行運算這個項目十分有趣,透過對硬體、作業系統和多執行緒的理論,去實作程式運行速度優化,可能是我一開始寫得真的太爛了,加速完後超有成就感。


上一篇
Day 5 - Process, Instruction, Program
下一篇
Day 7 - Operating System Services
系列文
非本科系也能懂和該懂得作業系統30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言